export enum ApiMethod {
  GET = "GET",
  POST = "POST",
  PUT = "PUT",
  DELETE = "DELETE",
}

export enum ApiType {
  DataSource = "datasource",
  REST = "rest",
}

export enum ApiStatus {
  Enabled = "enabled",
  Disabled = "disabled",
}

// MagicAPI 配置增强
export interface MagicAPIConfig {
  sql: string; // SQL语句
  params?: Record<string, any>; // 参数配置
  cache?: {
    // 缓存配置
    enabled: boolean;
    timeout: number;
    key?: string; // 自定义缓存key
  };
  page?: {
    // 分页配置
    enabled: boolean;
    pageSize: number;
    countSql?: string; // 自定义统计SQL
  };
  transaction?: boolean; // 事务配置
  timeout?: number; // SQL执行超时时间
  dynamicSql?: boolean; // 是否为动态SQL
  resultType?: "object" | "array" | "single"; // 结果类型
}

// APIJSON 配置增强
export interface APIJSONConfig {
  request: {
    // 请求结构
    method: string; // 请求方法
    tag: string; // 请求标签
    version: string; // API版本
    structure: any; // 请求结构体
    format?: boolean; // 是否格式化响应
  };
  query?: {
    // 查询配置
    cache?: boolean; // 是否缓存
    type?: string; // 查询类型
    table?: string; // 表名
    fields?: string[]; // 字段列表
    order?: string; // 排序
    group?: string; // 分组
    having?: string; // 分组条件
  };
  access?: {
    // 访问控制
    role?: string[]; // 角色限制
    needLogin?: boolean; // 是否需要登录
    permission?: string[]; // 权限控制
    rateLimit?: number; // 访问频率限制
  };
  mock?: {
    enabled?: boolean; // 是否启用mock
    rule?: any; // mock规则
  };
}

// SQL配置
export interface SqlConfig {
  sql: string;
  params: Record<string, { type: string; defaultValue: any }>;
  cache?: {
    enabled: boolean;
    timeout: number;
  };
  page?: {
    enabled: boolean;
    pageSize: number;
  };
}

// REST配置
export interface RestConfig {
  url: string;
  method: string;
  headers?: Record<string, string>;
  body?: any;
}

export interface ApiConfig {
  id: number;
  name: string;
  path: string;
  method: ApiMethod;
  type: ApiType;
  status: ApiStatus;
  description?: string;
  dataSourceId?: number;
  config: any;
  requestSchema?: string;
  responseSchema?: string;
  createdAt?: string;
  updatedAt?: string;
}

export interface ApiQuery {
  keyword?: string;
  page: number;
  pageSize: number;
}

export interface ApiResponse {
  list: ApiConfig[];
  total: number;
}
